#include "construtorIndice.h"
#include "persistencia.h"
#include "tipos.h"
#include "btree.h"
#include <string.h>

uint64_t obtemPosicaoAtual(FILE *file){
  return ftell(file);
}

ChavePrimaria constroiChavePrimaria(RegAluno regImportacao, uint64_t byteOffset){
  ChavePrimaria chavePrimaria;
  chavePrimaria.inscricao = regImportacao.inscricao;
  chavePrimaria.byteOffset = byteOffset;
  return chavePrimaria;
}

int calculaTamRegistroBanco(RegAluno registro){
  // nome, curso, inscricao, nota, | e quebralinha
  return strlen(registro.nome) + strlen(registro.curso) + 6 + 5 + 5;
}

void serializaRegistroImportacao(RegAluno registro, char *regSerializado){
  int tamanho = calculaTamRegistroBanco(registro);
  //0000-> tamanho, 000000-> inscricao, nome, curso, 00000->nota  
  sprintf(regSerializado,"%04d|%06d|%s|%s|%05d\n",tamanho,registro.inscricao,registro.nome,registro.curso,registro.nota);  
}

/*void serializaChavePrimaria(ChavePrimaria chavePrimaria, char *chaveSerializada){
  // 000000-> inscricao, 0000000000 -> byteoffset
  sprintf(chaveSerializada,"%06d|%010d|1\n",chavePrimaria.inscricao,chavePrimaria.byteOffset);
}*/

void importar(FILE *fileImportacao, ArquivosPersistencia *arquivos){
  char buffer[1000];
  int i;

  rrn_t root, promo_rrn;

  root = get_root(arquivos->fileIndicePrimario);
  
  while(!feof(fileImportacao)){
    fgets(buffer, sizeof(buffer), fileImportacao);    
    RegAluno reg = convertLinhaToRegistro(buffer);    
        
    int posicaoBanco = obtemPosicaoAtual(arquivos->fileBanco);
            
    ChavePrimaria chavePrimaria = constroiChavePrimaria(reg,posicaoBanco);
    ChavePrimaria chavePrimaria2;
    
    promo_t result = btinsert(arquivos->fileIndicePrimario,root, chavePrimaria, &promo_rrn, &chavePrimaria2);
    
    if (result == YES) {
      root = btcreate_root(arquivos->fileIndicePrimario,chavePrimaria2,root,promo_rrn);      
    }
    
    if (result != ERROR){	
	gravaRegistroArgBanco(reg,arquivos->fileBanco);
    }
       
    limpaRegistroArquivoImportacao(&reg);
  }  
  
  save_root(arquivos->fileIndicePrimario,root);
  
}



